//
//  main.swift
//  Underlying_Enumeration
//
//  Created by jianbo.pei on 2024/1/20.
//

import Foundation

enum Week: String {
    case MON, TUE, WED, THU, FRI, SAT, SUN
}

let w: Week = .MON

/**
 
 ①
 
 通过 `swiftc -emit-sil main.swift | xcrun swift-demangle` 终端生成 `SIL` 文件
 
 enum Week : String {
   case MON, TUE, WED, THU, FRI, SAT, SUN
   init?(rawValue: String)
   typealias RawValue = String
   var rawValue: String { get }
 }
 
 */


/**
 
 ②
 
 - 枚举中可以包含计算属性、类型属性，**不能**包含存储属性
   - 结构体可以包含存储属性，因为结构体的大小就是存储属性的大小。
     但enum大小取决于case的个数，只要case个数没有超过255，enum的大小就是1字节
 - 计算属性本质是get、set方法，对于值类型来说根本不用存储方法
 - 类型属性是全局变量，它的存储也和enum没有任何关系
 */


enum Shape {
    case cube(Int, Int, Int)
    case circle
}

var cube = Shape.cube(10, 20, 30)
print(cube)
